package com.uniandes.edu.co.controlador;

import java.util.List;

import com.uniandes.edu.co.anotaciones.LogD;
import com.uniandes.edu.co.anotaciones.LogT;
import com.uniandes.edu.co.anotaciones.LogsD;
import com.uniandes.edu.co.anotaciones.LogsT;
import com.uniandes.edu.co.dto.Defecto;
import com.uniandes.edu.co.dto.EtapasDesarrollo;
import com.uniandes.edu.co.excepciones.ExcepcionExiste;
import com.uniandes.edu.co.excepciones.ExcepcionVacio;
import com.uniandes.edu.co.procesar.defecto.ProcesarDefectos;

/**
 * Clase controladora que se encarga de las validaciones 
 * sobre los Defectos
 */
public class ControladorDefectos {
	/**
	 * instancia unica de la clase
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1)})
	@LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=21)})
	static private ControladorDefectos solitario = null;

	/**
	 * metodo que valida que solo este creado una instancia de 
	 * la clase
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=1, porcentajeRealValorGanado=1)})
    static public ControladorDefectos getSingleton() {
        if (solitario == null) {
            solitario = new ControladorDefectos();
        }
        return solitario;
    }
    
    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a agregar un nuevo defecto
     */
    @LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
    		@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=4, porcentajeRealValorGanado=1)})
    @LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=19)})
    public boolean agregarDefecto(String idDefecto,String descripcion,List<Defecto> listado){
    	
    	if(idDefecto.equals("") || descripcion.equals(""))
    	{
    		
    		new ExcepcionVacio("Existen datos vacios");
    		return false;
    	}
    	if(ProcesarDefectos.getSingleton().buscarDefecto(idDefecto, listado)!=null)
    	{
    		 new ExcepcionExiste("La Interrupcion ya existe");
    		 return false;
    	}
    	else
    		return ProcesarDefectos.getSingleton().agregarDefecto(idDefecto, descripcion, listado);
    }
   
    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a modificar una interrupcion
     */
    @LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
    		@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=3, porcentajeRealValorGanado=1)})
    @LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=19)})
    public boolean modificarDefecto(String idDefecto,String descripcion,List<Defecto> listado)
    {
    	if(idDefecto.equals("") || descripcion.equals(""))
    	{
    		new ExcepcionVacio("Existen datos vacios");
    		return false;
    	}
    	else
    		return ProcesarDefectos.getSingleton().modificarDefecto(idDefecto, descripcion, listado);
    }

    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a eliminar una interrupcion
     */
    @LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
    		@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=3, porcentajeRealValorGanado=1)})
    @LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=19)})
    public boolean eliminarDefecto(String idDefecto, List<Defecto> listado)
    {
    	if(idDefecto.equals(""))
    	{
    		new ExcepcionVacio("Existen datos vacios");
    		return false;
    	}
    	else
    		return ProcesarDefectos.getSingleton().eliminarDefecto(idDefecto, listado);
    		
    }

    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a consultar una interrupcion
     */
    @LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1)})
    @LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=26)})
    public void consultarDefecto(){
    	
    }
    
    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a consultar una interrupcion
     */
    @LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
    		@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=2, porcentajeRealValorGanado=1)})
    public Defecto buscarDefecto(String idDefecto, List<Defecto> listado)
    {
    	return ProcesarDefectos.getSingleton().buscarDefecto(idDefecto, listado);
    }
}
